# 编译器设置
CXX := g++
CXXFLAGS := -std=c++11 -Wall -Wextra -pedantic -I.
LDFLAGS := 
TARGET := myapp

# 自动获取所有源文件和头文件
SRCS := $(wildcard *.cpp)
HDRS := $(wildcard *.h *.hpp)
OBJS := $(SRCS:.cpp=.o)
DEPS := $(OBJS:.o=.d)

# 默认目标
all: $(TARGET)

# 主目标链接
$(TARGET): $(OBJS)
	$(CXX) $(CXXFLAGS) $(LDFLAGS) $^ -o $@

# 包含自动生成的依赖关系
-include $(DEPS)

# 模式规则：编译.cpp文件为.o文件
%.o: %.cpp
	$(CXX) $(CXXFLAGS) -MMD -MP -c $< -o $@

# 清理生成的文件
clean:
	rm -f $(TARGET) $(OBJS) $(DEPS)

# 重新构建：先清理再编译
rebuild: clean all

# 说明：make 默认编译，make clean 清理，make rebuild 完全重建
.PHONY: all clean rebuild
